package com.zk.iotgateway.rabbitmq;

import com.zk.iotgateway.util.SerializationUtils;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.MessageProperties;
import org.springframework.stereotype.Component;

/**
 *
 * 从map中获取对应的channel和queueName来发送消息
 * @author:mn.m
 * @create 2019-04-25 上午 11:00
 **/
@Component
public class IotRabbitMqSender {

    public void sendDataToQueueByQueueName(String data,String port) throws Exception {

        Channel channel = IotRabbitConfig.channelMap.get(port);
        String queueName = IotRabbitConfig.dataQueueNameMap.get(port);
        if (channel != null && queueName != null) {
            /*跨机器 开平台时要序列化数据*/
            /**
             * 发布一条不用持久化的消息，且设置两个监听。
             * @param exchange 消息交换机名称,空字符串将使用直接交换器模式，发送到默认的Exchange=amq.direct。此状态下，RoutingKey默认和Queue名称相同
             * @param routingKey 路由关键字
             * @param mandatory 监听是否有符合的队列
             * @param immediate 监听符合的队列上是有至少一个Consumer
             * @param BasicProperties  设置消息持久化：MessageProperties.PERSISTENT_TEXT_PLAIN是持久化；MessageProperties.TEXT_PLAIN是非持久化。
             * @param body 消息对象转换的byte[]
             * @throws java.io.IOException if an error is encountered
             */
            channel.basicPublish("",queueName,true,false, MessageProperties.TEXT_PLAIN, SerializationUtils.serialize(data));
     /*       channel.basicPublish("", queueName, null, data.getBytes());*/
        }

    }
}
